package demo.reflect;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;

/**
 * @Auther: hjy(lc))
 * @Date: 2022/8/5-08-05-16:50
 * @Description：demo.reflect
 */
/*
    查询该User对象包含哪些属性，属性的名字，访问修饰符等信息。
    修改某个属性的值，获取某个 属性的值。
 */
public class reflect_User {
    public static void main(String[] args) throws Exception {
        Class user = Class.forName("demo.reflect.User");

        //获取属性
        Field[] fields = user.getFields();
        for (Field field : fields) {
            System.out.println("修饰符：" + Modifier.toString(field.getModifiers()) + "  数据类型：" + field.getType()
                    + " , 字段名称： " + field.getName());
        }
        User cus = (User) user.newInstance();
        //获取某个属性值并修改
        Field field = user.getDeclaredField("name");
        //field.setAccessible(true);
        field.set(cus,"hjy");
        System.out.println("用户姓名为：" + field.get(cus));
        System.out.println("---------------------------------------");

        Method[] methods = user.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println("修饰符：" + Modifier.toString(method.getModifiers())
            + ", 返回类型：" + method.getReturnType() + ", 方法名称：" + method.getName()
            + "，参数个数： " + method.getParameterCount() + "，参数列表： " + Arrays.toString(method.getParameterTypes()));
        }

        //反射调用方法
        Method method = user.getDeclaredMethod("doSomething");
        method.invoke(cus,null);
    }
}
